package com.example.sse.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

/**
 * Redis配置类
 * 配置Redis消息监听容器，用于集群间通信
 */
@Slf4j
@Configuration
public class RedisConfig {

    /**
     * Redis消息监听容器
     * 只有在Redis可用时才创建，否则创建一个空的容器
     * @param connectionFactory Redis连接工厂（可选）
     * @return RedisMessageListenerContainer
     */
    @Bean
    @Primary
    public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        
        try {
            // 尝试设置连接工厂
            container.setConnectionFactory(connectionFactory);
            log.info("Redis消息监听容器已配置 - 集群模式可用");
        } catch (Exception e) {
            log.warn("Redis连接失败，使用单机模式（集群功能不可用）: {}", e.getMessage());
            // 不设置连接工厂，集群通信服务会优雅降级
        }
        
        return container;
    }
}